<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Document</title>
</head>

<body>
  <script>
    /**
     * 
      副作用函数 
      1 异步代码 比如ajax请求 他需要让浏览器发送http 所以对浏览器有影响就有了副作用
      2 localstorage 改变浏览器存储数据有影响
      3 对外部数据进行更改 比如我们传给函数一个对象 函数里修改对象某个属性的值造成影响

      纯函数没有副作用的函数 同时函数返回的结果仅依赖于传参
     * 
    */
    // 表达式的副作用  b=a++这个赋值表达式产生了一个副作用 让a的值加了个1
    var a = 42;
    var b = a++;
    // a=42的副作用是 a=42的返回值是42 并且把结果赋值给c c就是42了
    let c = eval("a = 42");
    // 副作用的应用 正常写法
    function vowels(str) {
      let matches;
      if (str) {
        matches = str.match(/[aeiou]/g);
        if (matches) {
          return matches;
        }
      }
    }
    // 带有副作用的写法 因为matches = str.match(/[aeiou]/g) 的副作用是返回一个数组
    function vowels2(str) {
      let matches;
      if (str && (matches = str.match(/[aeiou]/g))) return matches;
    }
    console.log(vowels2("Hello world"));
  </script>
</body>

</html>